package net.java.mediasystems.database.core.service;

import java.util.List;

import net.java.mediasystems.database.core.model.Metadata;

/**
 * MetadataService Definition.
 */
public interface MetadataService {
	
	/**
	 * Add a Metadata.
	 * 
	 * @return Metadata
	 */
	Metadata addMetadata(Metadata metadata);
	
	/**
	 * Get a List of Metadata by the given category name.
	 * 
	 * @param category String
	 * @return List<Metadata>
	 */
	List<Metadata> getAllMetadataDefinitionByCategory(String category);
	
	/**
	 * Get all MetadataDefinitnions.
	 * 
	 * @return List<Metadata>
	 */
	List<Metadata> getAllMetadataDefinitions();
	
	/**
	 * Get a Metadata by Category and Name.
	 * <br/><br/>
	 * SearchCriteria:
	 * <ul>
	 * <li>Category: case-sensitive</li>
	 * <li>Name: not case-sensitive</li> 
	 * </ul>
	 * 
	 * @param category String
	 * @param name String
	 * @return Metadata
	 */
	Metadata getMetadataDefinitionByCategoryAndName(String category, String name);

}
